This disclosure relates to systems and methods for reconfiguring hardware at run-time.
An embedded computer generally refers to a computer system that performs a dedicated function. Such systems often have to satisfy real-time computing requirements. From a hardware standpoint, most embedded computers are not reconfigurable, i.e., the set of features is fixed and cannot be changed at run-time, which is the time during which a program is running.
One configuration for implementing embedded systems is a system on a chip (SoC), which may be an integrated circuit integrating all components of a computer—such as digital, analog, mixed-signal, and radio frequency functions—on a single chip substrate. SoCs may be implemented using an application specific integrated circuit (ASIC) or a field programmable gate array (FPGA). In particular, an FPGA is field programmable, i.e., it is an integrated circuit designed to be configured by a user after it has been manufactured. This aspect of FPGAs opens up the possibility of reconfiguring the hardware of embedded systems at run-time.
However, an operating system (OS) running on embedded computers generally expects the hardware configuration of the embedded computer to be fixed and is not designed to manage configuring and/or reconfiguring hardware that changes over time. While an OS may be able to arbitrate the use of fixed hardware, the OS may not be capable of handling configuring and/or reconfiguring hardware that changes over time. Therefore, it would be desirable to have a framework that enables applications to request a specific hardware configuration of the embedded computer and that can manage the SoCs resources.